﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;

namespace PortalCurriculo.WebUI.UserControls.Curriculo.Cadastro
{
    public partial class CargoPretendido : Curriculo
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CargoCadastro.DropDownEspecializacaoArea.SelectedIndexChanged += ddlEspecializacaoArea_SelectedIndexChanged;
            if (Cargos == null) CarregarCargos();
        }

        private void ddlEspecializacaoArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Cargos == null || Cargos.Count == 0) return;

            foreach (var cargo in Cargos)
            {
                var listItem = CargoCadastro.DropDownCargo.Items.FindByValue(cargo.IdCargo.ToString());
                if (listItem != null) CargoCadastro.DropDownCargo.Items.Remove(listItem);
            }
        }

        private static List<CargoCurriculo> Cargos { get; set; }
        public static List<string> DescricoesCargo { get; set; }

        public List<CargoCurriculo> CargosCurriculo
        {
            get { return Cargos; }
            set
            {
                Cargos = value;
                if (value == null)
                {
                    DescricoesCargo = null;
                    return;
                }

                DescricoesCargo = new List<string>();

                foreach (var cargoCurriculo in value)
                    DescricoesCargo.Add(string.Concat(cargoCurriculo.Cargo.Descricao, " - ", cargoCurriculo.Cargo.EspecializacaoArea.Descricao));
            }
        }

        public void CarregarCargos()
        {
            lsvCargos.DataSource = DescricoesCargo;
            lsvCargos.DataBind();
        }

        public void Limpar()
        {
            Cargos = new List<CargoCurriculo>();
        }

        protected void imbIncluirCargo_Click(object sender, EventArgs e)
        {
            if (Cargos == null) Cargos = new List<CargoCurriculo>();

            if (DescricoesCargo == null) DescricoesCargo = new List<string>();

            Cargos.Add(new CargoCurriculo { IdCargo = int.Parse(CargoCadastro.DropDownCargo.SelectedValue), Ativo = true });
            DescricoesCargo.Add(string.Concat(CargoCadastro.DropDownCargo.SelectedItem.Text, " - ",
                                              CargoCadastro.DropDownEspecializacaoArea.SelectedItem.Text));
            CarregarCargos();
            CargoCadastro.LimparCampos();

            if (Cargos.Count >= 4) pnlCadastro.Enabled = false;
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs imageClickEventArgs)
        {
            pnlCadastro.Enabled = true;

            var cargo = ObterCargo(sender);
            var index = Cargos.IndexOf(cargo);
            cargo.Delete();

            Cargos.RemoveAt(index);
            DescricoesCargo.RemoveAt(index);

            CarregarCargos();
        }

        private CargoCurriculo ObterCargo(object sender)
        {
            var imageButton = (ImageButton) sender;
            var argument = imageButton.CommandArgument;

            var idSplited = argument.Split('|');

            return idSplited[0] != "0"
                       ? Cargos.Where(c => c.Id == int.Parse(idSplited[0])).FirstOrDefault()
                       : Cargos.Where(c => c.IdCargo == int.Parse(idSplited[1])).FirstOrDefault();
        }

        protected void imbEditar_Click(object sender, ImageClickEventArgs imageClickEventArgs)
        {
            pnlCadastro.Enabled = true;
            
            var cargo = ObterCargo(sender);

        }

        protected void lsvCargos_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var cargo = (string)item.DataItem;
            var panel = (Basico.Panel)item.FindControl("PanelCargo");
            var visualizacao = (Visualizacao.Cargo)panel.FindControl("Cargo");
            if (visualizacao != null) visualizacao.Descricao = cargo;

            var excluir = (ImageButton)panel.FindControl("imbExcluir");
            var editar = (ImageButton)panel.FindControl("imbEditar");

            var cargoAtual = Cargos[DescricoesCargo.IndexOf(cargo)];
            var argument = string.Concat(cargoAtual.Id.ToString(), "|",cargoAtual.IdCargo);

            editar.CommandArgument = excluir.CommandArgument = argument;
        }
    }
}